package com.levi.recursion;

/**
 * @author shentong
 * @date 2021/8/29 20:33
 * @Description 递归调用机制
 * 递归的概念:方法自己调用自己，每次传入的参数不同
 */
public class RecursionTest {
    public static void main(String[] args) {
//        test(4);
        System.out.println(factorial(4));
    }

    /**
     * 执行顺序 为test(4)调用test(3),test(3)调用test(2),所以执行顺序为test(2)->test(3)->test(4)
     * 所以打印顺序为2->3->4
     * @param n
     */
    public static void test(int n) {
        if (n > 2) {
            test(n-1);
        }
        //这里如果加else，只会打印出来2=2
        System.out.printf("n=%d\n",n);
    }

    /**
     * 阶乘问题
     * @param a
     */
    public static int factorial(int a) {
        if (a == 1) {
            return 1;
        }else {
            return factorial(a - 1) * a;
        }
    }
}
